package br.com.utfpr.menu;

import java.util.List;

import br.com.utfpr.controller.PessoaController;
import br.com.utfpr.controller.WebServerController;
import br.com.utfpr.data.Pessoa;
import br.com.utfpr.data.PessoaSelection;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class EscolhePessoaAtualizarServer extends Activity{
	
	private PessoaController pessoaController;
	private WebServerController webserver;
	private PessoaSelection pessoaSelection;
	private ListView escolherListView ;
	private List<PessoaSelection> pessoasSelecionadas;
	private PessoaArrayAdapter pessoaAdapter;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.escolher_usuario_alterar);
        pessoaController = new PessoaController((Context) this);
        Resources res = getResources();
        webserver = new WebServerController(pessoaController, res.getString(R.string.urlServidor));
        escolherListView = (ListView) findViewById(R.id.escolherListView);
        pessoasSelecionadas = webserver.getListaPessoasDoServidor();
//        escolherListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
//            @Override
//            public void onItemClick( AdapterView<?> parent, View item, 
//                                     int position, long id) {
//              PessoaSelection planet = listAdapter.getItem( position );
//              planet.toggleChecked();
//              PlanetViewHolder viewHolder = (PlanetViewHolder) item.getTag();
//              viewHolder.getCheckBox().setChecked( planet.isChecked() );
//            }
//          });
     // Set our custom array adapter as the ListView's adapter.  
        pessoaAdapter = new PessoaArrayAdapter(this, pessoasSelecionadas);  
        escolherListView.setAdapter(pessoaAdapter);  
//    	atualizaLista();
    }   
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.layout.menu_consulta, menu);
        return true;
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.consulta_voltar:
            	startActivity(new Intent(this,MainActivity.class));
            break;
        }
        return true;
    }
    
    public void salvar(View view){
        for(PessoaSelection pessoaSalvar : pessoasSelecionadas){
            if(pessoaSalvar.isSelecionado()){
            	pessoaController.salvarOuAtualizar(pessoaSalvar.getPessoa());
            }
        }
        Toast.makeText(this, "Salvo com sucesso!", Toast.LENGTH_SHORT).show();
    }
    

    /** Custom adapter for displaying an array of Planet objects. */
    private static class PessoaArrayAdapter extends ArrayAdapter<PessoaSelection> {

    private LayoutInflater inflater;
      
      public PessoaArrayAdapter( Context context, List<PessoaSelection> listaPessoaSelection ) {
        super( context, R.layout.simplerow, R.id.rowTextView, listaPessoaSelection );
        // Cache the LayoutInflate to avoid asking for a new one each time.
        inflater = LayoutInflater.from(context) ;
      }

      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
        // Planet to display
        PessoaSelection pessoaSelection = (PessoaSelection) this.getItem( position ); 

        // The child views in each row.
        CheckBox checkBox ; 
        TextView textView ; 
        
        // Create a new row view
        if ( convertView == null ) {
          convertView = inflater.inflate(R.layout.simplerow, null);
          
          // Find the child views.
          textView = (TextView) convertView.findViewById( R.id.rowTextView );
          checkBox = (CheckBox) convertView.findViewById( R.id.CheckBox01 );
          
          // Optimization: Tag the row with it's child views, so we don't have to 
          // call findViewById() later when we reuse the row.
          convertView.setTag( new PessoaSelectionViewHolder(textView,checkBox) );

          // If CheckBox is toggled, update the planet it is tagged with.
          checkBox.setOnClickListener( new View.OnClickListener() {
            public void onClick(View v) {
              CheckBox cb = (CheckBox) v ;
              PessoaSelection pessoaSelection = (PessoaSelection) cb.getTag();
              pessoaSelection.setSelecionado(!pessoaSelection.isSelecionado());
            }
          });        
        }
        // Reuse existing row view
        else {
          // Because we use a ViewHolder, we avoid having to call findViewById().
        	PessoaSelectionViewHolder viewHolder = (PessoaSelectionViewHolder) convertView.getTag();
          checkBox = viewHolder.getCheckBox() ;
          textView = viewHolder.getTextView() ;
        }

        // Tag the CheckBox with the Planet it is displaying, so that we can
        // access the planet in onClick() when the CheckBox is toggled.
        checkBox.setTag( pessoaSelection ); 
        
        // Display planet data
        checkBox.setChecked( pessoaSelection.isSelecionado() );
        textView.setText( pessoaSelection.getPessoa().getNome() );      
        
        return convertView;
      }
      
    }

    public Object onRetainNonConfigurationInstance() {
      return pessoasSelecionadas ;
    }
}

/** Holds child views for one row. */
class PessoaSelectionViewHolder {
  private CheckBox checkBox ;
  private TextView textView ;
  public PessoaSelectionViewHolder() {}
  public PessoaSelectionViewHolder( TextView textView, CheckBox checkBox ) {
    this.checkBox = checkBox ;
    this.textView = textView ;
  }
  public CheckBox getCheckBox() {
    return checkBox;
  }
  public void setCheckBox(CheckBox checkBox) {
    this.checkBox = checkBox;
  }
  public TextView getTextView() {
    return textView;
  }
  public void setTextView(TextView textView) {
    this.textView = textView;
  }    
}